package main

import (
	"context"
	"fmt"
	"github.com/go-redis/redis/v8"
	"time"
)

var ctx = context.Background()

var rdb *redis.Client

func init() {
	rdb = redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})
}

func main() {
	//ExampleClient()
	MyExample()
}

func MyExample() {
	// set string
	err := rdb.Set(ctx, "name", "ryw", 10*time.Second).Err()
	if err != nil {
		panic(err)
	}
	val, err := rdb.Get(ctx, "name").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("name=", val)

	// Hash
	err = rdb.HMSet(ctx, "user", "name", "ryw", "age", 30).Err()
	if err != nil {
		panic(err)
	}
	r, err := rdb.HMGet(ctx, "user", "name").Result()
	if err != nil {
		panic(err)
	}
	fmt.Printf("user=%v, %t\n", r, r)
	sl, err := rdb.HVals(ctx, "user").Result()
	if err != nil {
		panic(err)
	}
	fmt.Printf("user=%v\n", sl)

	// List
	listResult, err := rdb.LPush(ctx, "line", "name").Result()
	if err != nil {
		panic(err)
	}
	fmt.Printf("list result user=%v\n", listResult)

}

func ExampleClient() {
	// set string
	err := rdb.Set(ctx, "key", "value", 0).Err()
	if err != nil {
		panic(err)
	}
	// get string
	val, err := rdb.Get(ctx, "key").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("key", val)

	val2, err := rdb.Get(ctx, "key2").Result()
	if err == redis.Nil {
		fmt.Println("key2 does not exist")
	} else if err != nil {
		panic(err)
	} else {
		fmt.Println("key2", val2)
	}
	// Output: key value
	// key2 does not exist

}
